package com.shrct.businessprocess.project;

import com.shrct.businessprocess.budget.RCBudget;
import com.shrct.businessprocess.project.RCActualCostReport;
import com.shrct.businessprocess.project.RCCost4ACTItemSnap;
import com.shrct.businessprocess.project.RCCost4RemainItemSnap;
import com.shrct.businessprocess.project.impl.RCActualCostReportItemImpl;
import com.shrct.businessprocess.project.proxy.RCActualCostReportItemProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCActualCostReportItemImpl.class)
public interface RCActualCostReportItem extends IModelObject {
  public abstract RCActualCostReport getReport();
  
  public abstract RCActualCostReportItem setReport(final RCActualCostReport report);
  
  public abstract RCBudget getBudget();
  
  public abstract RCActualCostReportItem setBudget(final RCBudget budget);
  
  public abstract RCActualCostReportItem getPrevItem();
  
  public abstract RCActualCostReportItem setPrevItem(final RCActualCostReportItem prevItem);
  
  public abstract Collection<RCCost4ACTItemSnap> getCost4ActItemSnaps();
  
  public abstract RCCost4ACTItemSnap createAndAddtoCost4ActItemSnaps();
  
  public abstract RCCost4ACTItemSnap createAndAddtoCost4ActItemSnaps(final Procedure1<RCCost4ACTItemSnap> updater);
  
  public abstract RCActualCostReportItem removeFromCost4ActItemSnaps(final RCCost4ACTItemSnap rCCost4ACTItemSnap);
  
  public abstract RCActualCostReportItem removeAllCost4ActItemSnaps();
  
  public abstract Collection<RCCost4RemainItemSnap> getCost4RemainItemSnaps();
  
  public abstract RCCost4RemainItemSnap createAndAddtoCost4RemainItemSnaps();
  
  public abstract RCCost4RemainItemSnap createAndAddtoCost4RemainItemSnaps(final Procedure1<RCCost4RemainItemSnap> updater);
  
  public abstract RCActualCostReportItem removeFromCost4RemainItemSnaps(final RCCost4RemainItemSnap rCCost4RemainItemSnap);
  
  public abstract RCActualCostReportItem removeAllCost4RemainItemSnaps();
  
  public abstract Double getTotalIncomeAmount();
  
  public abstract RCActualCostReportItem setTotalIncomeAmount(final Double totalIncomeAmount);
  
  public abstract Double calcTotalIncome();
  
  public abstract Double getTotalActualAmount();
  
  public abstract RCActualCostReportItem setTotalActualAmount(final Double totalActualAmount);
  
  public abstract Double calcTotalActualAmount();
  
  public abstract Double getTotalGrossProfit();
  
  /**
   * 本次收入
   */
  public abstract Double getIncomeAmount();
  
  /**
   * 本次Actual Cost
   */
  public abstract Double getActualAmount();
  
  /**
   * 本次毛利
   */
  public abstract Double getGrossProfit();
  
  public abstract Boolean isEmptyResult();
  
  public abstract void performCalculate();
  
  public abstract RCActualCostReportItemProxy toProxy();
}
